package tools;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;

/**
 *
 */
public class ShowIcon extends JComponent implements PropertyChangeListener {

    ImageIcon icon = null;
    File file = null;

    public ShowIcon(JFileChooser fc) {
        setPreferredSize(new Dimension(100, 50));
        fc.addPropertyChangeListener(this);
    }

    public void icon() {
        /**
         * wenn file nul ist dann gehe raus und mache nichts
         */
        if (file == null) {
            icon = null;
            return;
        }

        /**
         * wenn file nicht leer ist
         * dann skaliere das Icon
         */
        ImageIcon tmpIcon = new ImageIcon(file.getPath());
        if (tmpIcon != null) {
            icon = new ImageIcon(tmpIcon.getImage().
                    getScaledInstance(90, -1,
                    Image.SCALE_DEFAULT));
        }
    }

    /**
     *
     * @param e
     */
    public void propertyChange(PropertyChangeEvent e) {
        boolean update = false;
        String prop = e.getPropertyName();

        /**
         * beim wechsel zu einem anderen ordner,
         * mache nix
         */
        if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
            file = null;
            update = true;

            /**
             * beim auswaehlen eines Files,
             * den setzte file mit den neuen wert.
             */
        } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
            file = (File) e.getNewValue();
            update = true;
        }

        /**
         * wenn bild geaendert ist
         */
        if (update) {
            icon = null;
            /**
             * wenn man das icon sehen kann
             * dann zeichne
             */
            if (isShowing()) {
                icon();
                repaint();
            }
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        if (icon == null) {
            icon();
        }
        if (icon != null) {
            int x = getWidth() / 2 - icon.getIconWidth() / 2;
            int y = getHeight() / 2 - icon.getIconHeight() / 2;

            if (y < 0) {
                y = 0;
            }

            if (x < 5) {
                x = 5;
            }
            icon.paintIcon(this, g, x, y);
        }
    }
}